package com.tomtop.core.dorequest;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.springframework.http.HttpMethod;
 
/**
 * 该注解如果加在类上，类中所有加有该注解的方法，都会继承该注解的值
 *
 */
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DoHttpRequest {
	/**
	 * 是否发起的https请求,如果不设置默认是no
	 * @return
	 */
	judge isHttps() default judge.auto;
	/**
	 * 请求的主机地址的key，该值会以 这个key取tomtop.dohttp.[key].的值，如果找不到，默认是 主机地址127.0.0.1 ,主机端口 80
	 * @return
	 */
	String hostKey() default "";
	
	/**
	 * http 服务版本参数，会以请求参数的形式发出； 
	 * @return
	 */
	String version () default "";
	/**
	 * 请求的路径,例如/,/a,/a/{{pathname}}
	 * @return
	 */
	String  path() default "/";

	/**
	 * 发起请求的方法,填多个只会第一个生效,默认GET请求
	 * @return
	 */
	HttpMethod[] method() default {} ;
	
	/**
	 * 是否当做from表单提交,如果不设置默认是no
	 * @return
	 */
	judge isfrom() default judge.auto;
	

	/**
	 * 是否需要缓存,如果不设置默认是no
	 * @return
	 */
	judge iscache() default judge.auto;

	/**
	 * 缓存超时时间,单位秒，默认5000
	 * @return
	 */
	int cacheTimeout() default -1;
	
	/**
	 * 是否开启长连接，默认开启，
	 */
	judge isKeepAlive() default judge.auto;
	
	/**
	 * 是否需要手动处理响应结果，默认yes,
	 * no:结果集根据返回类型处理为返回，返回类型如果是string，直接返回，如果不是，当做json处理,处理失败会抛出运行时异常，方法体内容不会执行,
	 * yes:不会自动处理响应结果集,方法体内容内容会执行,方法体内可以用  HttpResponse response = HttpResponse.getCurrentResponse(); 获取响应结果手动处理
	 */
	judge manuallyprocessed() default judge.auto;
	
	 enum judge{
		 yes,no,auto
	 }
}
